package secondStage.part6.函数式接口.作为方法的返回值;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;

/**
 * @ClassName: [ComparatorDemo]
 * @Description: 函数式接口作为方法的返回值
 * @Author: [黄劲松]
 * @CreateDate: [2021-04-24]
 * @Version: [v1.0]
 */
/*
1.3函数式接口作为方法的返回值
需求
    定义一个类(ComparatorDemo)，在类中提供两个方法
    一个方法是:Comparator<String> getComparator()方法返回值Comparator是一个函数式接口
    一个方法是主方法，在主方法中调用getComparator方法
如果方法的返回值是一个函数式接口，我们可以使用Lambda表达式作为结果返回
    private static Comparator<String> getComparator) {
    return(s1, s2) -> s1.length( - s2.length();}
 */
public class ComparatorDemo {
    public static void main(String[] args) {
        //构造使用场景
        //定义集合，存储字符串元素
        ArrayList<String> array = new ArrayList<>();
        array.add("wwww");
        array.add("ss");
        array.add("fff");
        array.add("a");
        System.out.println("排序前：" + array);
        //自然排序
        //Collections.sort(array);

        //按照指定的比较器进行排序，按长度排序
        Collections.sort(array, getComparator());
        System.out.println("排序后：" + array);
    }

    private static Comparator<String> getComparator() {
        //匿名内部类的方式实现
        /*Comparator<String> comp = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();
            }
        };
        return comp;*/

        /*return new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();
            }
        };*/
        //Lambda表达式
        /*return (String s1,String s2)->{
            return s1.length()-s2.length();
        };*/
        return (s1, s2) -> {
            return s1.length() - s2.length();
        };
    }

}
